/**
 * 用于查询测试的函数
 */

const { User, Blog } = require('../model')
const { Op } = require('sequelize')

!(async function () {
  // findOne 只会拿到一条儿数据
  // const users = await User.findOne({
  //   // where 是查询的条件儿
  //   // order : 排序规则
  //   // offset 是偏移量
  //   // limit 限制的条数
  //   where: {
  //     id: 2
  //   },
  //   // 查询指定的列
  //   attributes: ['userName', 'password', 'nickName', 'id']
  // })
  // console.log(users)
  // console.log(users.dataValues)

  // findAll 是查询多条数据的
  // const users = await User.findAll({
  //   order:[
  //     ['id','desc']
  //   ],
  // where: {
  // 等价于 in
  // id: [1,2]
  // or 的用法
  // id: {
  //   [Op.or]: [1,2]
  // }
  // 文档上有关于like 的用法，就先这种拉， 看联表查询的用法了先， 看完这个，先不配置jest， 先搞eslint 和git 环境
  // }
  // 跳过条数
  // offset: 1,
  // 显示条数
  // limit: 1
  // })
  // 数据都在dataValues 中， 需要遍历出来了
  // const usersMap = users.map(user=>user.dataValues)
  // console.log(usersMap)

  // 联和查询
  const usersAndBlogs = await User.findAndCountAll({
    // 链入， 这里是个数组，因为可能是多个表联合查询的， 提前是建立好了对应的关系
    include: [
      {
        model: Blog,
        // 就是独立的配置项，
        attributes: ['id', 'title', 'content'], // 属性
        where: {
          id: [2],
        },
      },
    ],
  })

  // rows 是真正的数组数据
  // console.log(usersAndBlogs.rows)
  // 映射出来一份数据
  const usersAndBlogsMap = usersAndBlogs.rows.map((usersAndBlog) => {
    usersAndBlog = usersAndBlog.dataValues
    // 再一ing设blogs 的数据
    usersAndBlog.blogs = usersAndBlog.blogs.map((blog) => blog.dataValues)
    return usersAndBlog
  })
  console.log(JSON.stringify(usersAndBlogsMap))
})()
